package keer.httpinterface;

import keer.httpinterface.utils.IOUtils;

import java.io.IOException;
import java.io.InputStream;

/**
 * 自定义异常类HttpInterfaceException，用于处理HTTP接口调用过程中的异常情况
 * 该类扩展了Exception类，提供了三个构造函数，分别用于处理不同的异常场景
 */
public class HttpInterfaceException extends Exception {
    /**
     * 构造函数，接收一个字符串参数作为异常信息
     *
     * @param message 异常信息，描述异常情况
     */
    public HttpInterfaceException(String message) {
        super(message);
    }

    /**
     * 构造函数，接收一个字符串参数和一个Throwable对象作为参数
     *
     * @param message 异常信息，描述异常情况
     * @param cause 异常的原因，通常是一个Throwable对象
     */
    public HttpInterfaceException(String message, Throwable cause) {
        super(message, cause);
    }

    /**
     * 构造函数，接收一个字符串参数和一个InputStream对象作为参数
     * 该构造函数用于处理HTTP接口返回的错误信息为流的情况
     *
     * @param message 异常信息，描述异常情况
     * @param error 错误信息的流，通常来自HTTP响应体
     */
    public HttpInterfaceException(String message, InputStream error) {
        super(message, new IOException(readError(error)));
    }

    /**
     * 读取错误信息的辅助方法
     * 该方法尝试从输入流中读取错误信息，并返回作为字符串
     * 如果输入流为空或读取过程中发生异常，则返回固定的错误信息
     *
     * @param error 错误信息的流，通常来自HTTP响应体
     * @return 错误信息的字符串表示，如果读取失败则返回固定的错误信息
     */
    public static String readError(InputStream error) {
        try {
            if (error != null) {
                return IOUtils.readText(error);
            }
            return null;
        } catch (IOException e) {
            return "Read error text failure.";
        }
    }
}
